package com.mp.core.utils;

import com.alibaba.fastjson.JSONObject;
import com.mp.enums.ActionEnum;
import com.mp.enums.ToSendEnum;

/**
 * @author jack
 * 这个类是提供给门户，ios，安卓，微信商城用的
 * 门户接受此类数据后需要使用本类的方法转换成对于的数据类型格式（类，或者list）
 * 其他自行处理
 * 200：表示成功
 * 501：bean验证错误，不管多少个错误都以map形式返回
 * 502：拦截器拦截到用户token出错
 * 503：参数错误
 * 505：redis报错
 * 555：异常抛出信息
 * 600：授权失败
 * 1000：表示普通错误，错误信息在msg字段中
 */
public class MrdNettyResult {

    /**
     * 返回json结果
     */
    private static JSONObject result = new JSONObject();


    /**
     * 格式化WsJson结果
     *
     * @param code
     * @param action
     * @param msg
     * @param data
     * @param toWhom
     * @return
     */
    private static JSONObject setWsJSONObject(Integer code, ActionEnum action, String msg, Object data, ToSendEnum toWhom) {
        result.put("code", code);
        result.put("action", action);
        result.put("msg", msg);
        result.put("data", data);
        result.put("toWhom", toWhom);
        result.put("systemTime", System.currentTimeMillis());
        return result;
    }

    /**
     * ws消息格式错误
     *
     * @return
     */
    public static JSONObject convertError(ActionEnum action) {
        return convertError("", action);
    }

    /**
     * ws消息格式错误
     *
     * @return
     */
    public static JSONObject convertError(String msg, ActionEnum action) {
        JSONObject result = new JSONObject();
        result.put("msg", msg);
        result.put("code", 503);
        result.put("action", action);
        result.put("toWhom", ToSendEnum.TO_SENDER);
        return result;
    }

    /**
     * ws已经是好友
     *
     * @return
     */
    public static JSONObject convertError801(ActionEnum action, Object data, ToSendEnum toWhom) {
        return setWsJSONObject(801, action, "", data, toWhom);
    }

    /**
     * ws错误提示
     *
     * @return
     */
    public static JSONObject convertError802(ActionEnum action, String msg, ToSendEnum toWhom) {
        return setWsJSONObject(802, action, msg, null, toWhom);
    }

    /**
     * ws消息格式错误
     *
     * @return
     */
    public static JSONObject ErrorBuild(String msg, ActionEnum action, Integer code, Object data) {
        JSONObject result = new JSONObject();
        result.put("msg", msg);
        result.put("code", code);
        result.put("data", data);
        result.put("action", action);
        result.put("toWhom", ToSendEnum.TO_SENDER);
        return result;
    }

    /**
     * ws token错误
     *
     * @return
     */
    public static JSONObject tokenError(ActionEnum action) {
        JSONObject result = new JSONObject();
        result.put("msg", "tokenError");
        result.put("code", 999);
        result.put("action", action);
        result.put("toWhom", ToSendEnum.TO_SENDER);
        return result;
    }


    /**
     * ws 服务错误
     *
     * @return
     */
    public static JSONObject serviceError(ActionEnum action) {
        JSONObject result = new JSONObject();
        result.put("msg", "服务器异常");
        result.put("code", 888);
        result.put("action", action);
        result.put("toWhom", ToSendEnum.TO_SENDER);
        return result;
    }

    /**
     * code = 200
     *
     * @param action
     * @return
     */
    public static JSONObject wsOk(ActionEnum action, String msg, ToSendEnum toWhom) {
        return setWsJSONObject(200, action, msg, null, toWhom);
    }

    /**
     * code = 200
     *
     * @param action
     * @param data
     * @return
     */
    public static JSONObject wsOk(ActionEnum action, Object data, ToSendEnum toWhom) {
        return setWsJSONObject(200, action, "", data, toWhom);
    }
}
